/**
 * 操作分三种：
 * J: 能量加一
 * D: 如果对方发波，则可挡住，对方不发波，也没关系
 * B: 发波，如果对方不是D，则我方胜，发波会减少一点能量，如果发波前没有能量则不能发波
 * 现在已知对方的操作序列，求操作方案的总数，满足：
 * 1. 最后一招使用B打死对方
 * 2. 最后一招之前不用B
 * 3. 本方还活着
 * 注意到case数量虽然有1E5，但是N只有30，因此可以用O(1E5*(30^2))
 * 令Dij是第i回合过后能量为j的方案总数
 * 则如果对方发波有: Dij = D[i-1][j]
 * 对方不发波有：Dij = D[i - 1][j] + D[i - 1][j - 1]
 * 最后 D[N-1][1] 到 D[N-1][N-1] 累加和即可
 * 注意特判
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>

using Real = long double;
using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;

llt const MOD = 998244353LL;

int N;
string S;

llt proc(){
    if(1 == N) return 0;
    if(S[N - 1] == 'D') return 0;
    if(S[N - 1] == 'B') return 0;

    vector<vector<llt>> D(N + 1, vector<llt>(N + 1, 0));

    D[0][0] = 1;
    for(int i=1;i<N;++i){
        auto ch = S[i - 1];
        for(int j=0;j<=N;++j){
            if('B' == ch){
                D[i][j] = D[i - 1][j];
            }else{
                D[i][j] = D[i - 1][j];
                if(j >= 1) D[i][j] += D[i - 1][j - 1];
            }
        }
    }
    llt ans = accumulate(D[N - 1].begin()+1, D[N - 1].end(), 0LL);
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofakse = 1;
    cin >> nofakse;
    while(nofakse--){
        cin >> N >> S;
        cout << proc() << endl;
    }
    return 0;
}